﻿Public Class IsyeriPrimBorcu2011 : Inherits Process

	Dim Borc As Prim.Borc.BorcIsyeri
	Dim pesintar As Date

	Public Overrides Sub GenericEvent(ByVal e As ProcessEventArgs)
		Select Case e.EventType
			Case EventType.Initialize
				Start("İşyeri Taksitlendirme (2011)", "İşyeri bilgisini girin.")
				AddIsyeri()
				AddDate("odetar", "Ödeme tar.", "nl", YMD(Today))
				StartBody()
				AddReport()
			Case EventType.ValidateForm
				Tables.Clear()
				Tables.Add("isyeri", Isyeri.IsyeriNoAra(Remote, Input("Isyeri")))
				Rs = Hukuk.Af.GenelIsyeriOku(Local, 2011, Input("Isyeri"))
				pesintar = Input("odetar")
				If Not Rs.EOF Then
					'Af kaydı var
					Dim Answer As String = Ask("Bu işyerinin kaydı yapılmıştır. Ne yapmak istiyorsunuz?", "1|Ödeme planını göster;2|Ödeme planında değişiklik yap;3|Ödeme planını sil")
					If Answer = "" Then Focus("Isyeri") : Return
					If Answer = "1" Then
						Dim Process As New OdemePlaniRaporuIsyeri2011
						Process.Arguments.Add("isyerino", Tables("isyeri")("isyerino"))
						Window.ClearAndLaunch(Process)
						'Window.Launch(Process)
						'Process.Run(Window)
						Return
					ElseIf Answer = "2" Then
					ElseIf Answer = "3" Then
						If Not Confirm("Dikkat! Ödeme planını silerseniz, bu değişikliği geri alamazsınız. Devam etmek istediğinize emin misiniz?") Then Return
						Hukuk.Af.OdemePlaniIsyeriSil(Local, 2011, Input("Isyeri"))
						Info("Ödeme planı silinmiştir.")
						Close()
						Return
					End If
				Else
					'Af kaydı yok
					Dim Text As String = ""
					Rs = Hukuk.Af.TaksitIsyeriOku(Local, 2008, Input("Isyeri"))
					If Not Rs.EOF Then Text &= " ve 2008"
					Rs = Hukuk.Af.TaksitIsyeriOku(Local, 2009, Input("Isyeri"))
					If Not Rs.EOF Then Text &= " ve 2009"
					If Text <> "" Then Warning("Bu işyeri " & Mid(Text, 5) & " yılındaki aftan yararlanmıştır.")
					Dim Answer As String = Ask("Ne yapmak istiyorsunuz?", "1|Borcunu otomatik hesapla;2|Borcu hesaplama, elden girilecek")
					If Answer = "" Then Focus("Isyeri") : Return
					If Answer = "1" Then
						Help = "Prim borcu hesaplanıyor..."
						Borc = Prim.Borc.HesaplaIsyeri(Remote, Input("Isyeri"), "1976/01/01", "2011/06/30", pesintar)
						If Borc.ErrorMessage <> "" Then
							Warning(Borc.ErrorMessage)
							ResetForm()
							Return
						End If
						If Borc.Aylar.Count = 0 Then
							Warning("İşyerinin ilgili dönemlere ait borcu bulunamadı.")
							ResetForm()
							Return
						End If
					Else
						Borc = New Prim.Borc.BorcIsyeri
						Borc.Token = Remote
						Borc.Start(Input("Isyeri"), pesintar)
					End If
					ManuelBorcGoster()
				End If
				e.Result = True
			Case EventType.Edit
				Dim Process As New IsyeriPrimBorcu2011Bordrolar
				Process.isyerino = Tables("isyeri")("isyerino")
				Process.Run(Window)
				If Not Process.Result Then Return
				ManuelBorcGoster()
			Case EventType.Save
				Dim Process As New IsyeriPrimBorcu2011Secenekler
				Process.Borc = Borc
				Window.Launch(Process)
				'Process.Run(Window)
			Case EventType.PageHeader
				Report.PrintReportInfo("İŞYERİ PRİM BORCU DÖKÜMÜ", FormatIsyeriNo(Tables("isyeri")("isyerino")) & " - " & Trim(Tables("isyeri")("isyeriadi")) & ", ÖDEME TARİHİ: " & DMY(Borc.OdemeTarihi))
				Report.SetColumns("Tarih;Bordro;Kişi;PEK;Anapara;Ceza;Toplam;Elden", "2;1;1;2;2;2;2;1", "d;c;n;m;m;m;m;c", "--")
			Case EventType.ReportDetail
				Dim Toplam(3) As Decimal
				For Each Ay As Prim.Borc.Borc.Ay In Borc.Aylar.Values
					For Each Bordro In Ay.Bordrolar
						Report.Print(Ay.Tarih, Bordro.tip, Bordro.yatirimlar.Count, Bordro.pek, Bordro.anapara, Bordro.ceza, Bordro.anapara + Bordro.ceza, If(Bordro.virtual, "*", ""))
						Toplam(0) += Bordro.anapara
						Toplam(1) += Bordro.ceza
						Toplam(2) += Bordro.anapara + Bordro.ceza
					Next
				Next
				Report.PrintTotal("<cs=4><l>TOPLAM", Toplam(0), Toplam(1), Toplam(2), "")
		End Select
	End Sub

	Sub ManuelBorcGoster()
		Rs = Hukuk.Af.IsyeriBordroOku(Local, 2011, Input("Isyeri"))
		For Each bordro In Borc.Bordrolar.ToArray
			If bordro.virtual Then Borc.Bordrolar.Remove(bordro)
		Next
		For Each Row In Rs
			Borc.BordroEkle(Rs("bordrotar"), Rs("bordro"), Rs("pek"))
		Next
		Borc.DonemlereAyir()
		Report.Reset()
		Help = "Bordroları düzenlemek için Düzenle butonunu, taksitlendirmeye devam etmek için Devam butonunu kullanın."
		Buttons.Show("Edit.Next.Reset")
	End Sub

End Class

Class IsyeriPrimBorcu2011Secenekler : Inherits Process

	Public Borc As Prim.Borc.Borc
	Public donem01, donem02 As Input
	Public donem11, donem12 As Input

	Public Overrides Sub GenericEvent(ByVal e As ProcessEventArgs)
		Select Case e.EventType
			Case EventType.Initialize
				Start("İşyeri Taksitlendirme (2011)", "Taksitlendirilecek dönem aralığını girin.")
				Dim List As String = ""
				For Each Donem In Borc.Donemler.Values
					List &= "|" & Donem.Donem
				Next
				donem01 = AddCombo("donem01", "Aralık (SSY için)", Mid(List, 2), "", "--first--")
				donem02 = AddCombo("donem02", "", Mid(List, 2), "", "--last--")
				donem11 = AddCombo("donem11", "Aralık (SGY için)", Mid(List, 2), "", "--first--")
				donem12 = AddCombo("donem12", "", Mid(List, 2), "nl", "--last--")
				StartBody()
				AddReport()
				Buttons.Show("Back")
			Case EventType.ValidateForm
				Af2011Genel.IndirimliCezaHesapla(Borc, donem01, donem02, donem11, donem12)
				Report.Begin()
				Help = "Ödeme seçenekleri listelenmiştir. Devam etmek için Devam butonunu kullanın."
				Buttons.Show("Next.Back")
				e.Result = True
			Case EventType.PageHeader
				Report.EndBorders()
				Report.PrintReportInfo("AF ÖDEME SEÇENEKLERİ", FormatIsyeriNo(Tables("isyeri")("isyerino")) & " - " & Trim(Tables("isyeri")("isyeriadi")) & ", ÖDEME TARİHİ: " & DMY(Borc.OdemeTarihi))
				Report.BeginBorders()
				Report.SetColumns("", "1;1;1;1;1;1;1;1;1", "c;m;m;m;m;m;m;m;c", "--")
				Report.PrintTotal("<rs=2><c>Dönem", "<rs=2><c>Anapara", "<cs=2><c>Normal borç", "<cs=2><c>Peşin ödeme durumunda", "<cs=3><c>Taksitli ödeme durumunda")
				Report.PrintTotal("<r>Ceza", "<r>Toplam", "<r>Ceza", "<r>Toplam", "<r>Ceza", "<r>Toplam", "<c>P/T")
			Case EventType.ReportDetail
				Dim Toplam(9) As Decimal
				For Each Donem In Borc.Donemler.Values
					If Donem.Aktif Then
						Report.Print(Donem.Donem, Donem.Anapara, Donem.Ceza, Donem.Toplam,
						 Donem.Sum("p.ceza"), Donem.Anapara + Donem.Sum("p.ceza"),
						 Donem.Sum("t.ceza"), Donem.Anapara + Donem.Sum("t.ceza"), If(Donem.PesinDurumu = "P", "Peşin", ""))
						Toplam(0) += Donem.Anapara
						Toplam(1) += Donem.Ceza
						Toplam(2) += Donem.Toplam
						Toplam(3) += Donem.Sum("p.ceza")
						Toplam(4) += Donem.Anapara + Donem.Sum("p.ceza")
						Toplam(5) += Donem.Sum("t.ceza")
						Toplam(6) += Donem.Anapara + Donem.Sum("t.ceza")
						Toplam(7) += If(Donem.PesinDurumu = "P", Donem.Anapara + Donem.Sum("t.ceza"), 0)
						Toplam(8) += If(Donem.PesinDurumu = "T", Donem.Anapara + Donem.Sum("t.ceza"), 0)
					End If
				Next
				Report.PrintTotal("", Toplam(0), Toplam(1), Toplam(2), Toplam(3), Toplam(4), Toplam(5), Toplam(6), "")
				Report.EndBorders()
				Report.SkipLine()
				Report.Print("<cs=9><l>NORMAL ANAPARA VE CEZA TOPLAM TUTARI : " & Fm(Toplam(2), "TL"))
				Report.Print("<cs=9><l>PEŞİN ÖDEME SEÇENEĞİ İLE ÖDENECEK TUTAR : " & Fm(Toplam(4), "TL"))
				Report.Print("<cs=9><l>TAKSİTLİ ÖDEME SEÇENEĞİ İLE ÖDENECEK TUTAR : " & Fm(Toplam(6), "TL") & " (Peşin " & Fm(Toplam(7), "TL") & ", taksitle " & Fm(Toplam(8), "TL") & ")")
			Case EventType.Save
				Dim Answer As String = Ask("Ne yapmak istiyorsunuz?", "T|Taksitli ödeme seçeneği ile devam edilsin.;P|Peşin ödeme seçeneği ile devam edilsin.;x|İşlem iptal edilsin.")
				Select Case Answer
					Case "" : Return
					Case "x" : Close() : Return
					Case "P" : PesinKaydet()
					Case "T" : TaksitliKaydet()
				End Select
		End Select
	End Sub

	Sub PesinKaydet()
		If Not Confirm("İşyeri borcunu peşin ödeme suretiyle aftan yararlandırılacak. Devam etmek istediğinize emin misiniz?") Then Return
		For Each Donem In Borc.Donemler.Values
			If Donem.Aktif Then
				Donem.OdemeTarihi = Today.Date
				Donem.PesinDurumu = "P"
				For Each Ay In Donem.Aylar
					For Each Bordro In Ay.Bordrolar
						Bordro.indceza = Bordro.temp("p.ceza")
					Next
				Next
			End If
		Next
		Hukuk.Af.KaydetIsyeri(Local, "2011", Tables("isyeri")("isyerino"), Borc, User.Kaykul)
		Info("Ödeme planı kaydedildi.")
		Dim Process As New OdemePlaniRaporuIsyeri2011
		Process.Arguments.Add("isyerino", Tables("isyeri")("isyerino"))
		Window.ClearAndLaunch(Process)
	End Sub

	Sub TaksitliKaydet()
		For Each Donem In Borc.Donemler.Values
			If Donem.Aktif Then
				For Each Ay In Donem.Aylar
					For Each Bordro In Ay.Bordrolar
						If Bordro.aktif Then Bordro.indceza = Bordro.temp("t.ceza")
					Next
				Next
			End If
		Next
		Dim Process As New TaksitDagitimi
		For Each Donem In Borc.Donemler.Values
			If Donem.Aktif And Donem.PesinDurumu = "T" Then
				Process.Borc.Add(Donem.Anapara + Donem.Sum("t.ceza"))
			End If
		Next
		Window.Launch(Process, True)
	End Sub

	Sub Kaydet(Taksitler As SortedList(Of Date, Integer))
		Dim i As Integer = -1, c As Integer = 0, d As Date
		For Each Donem In Borc.Donemler.Values
			Donem.OdemeTarihi = Today.Date
			If Donem.Aktif Then
				If Donem.PesinDurumu = "P" Then
					Donem.OdemeTarihi = Borc.OdemeTarihi
				Else
					If c = 0 Then
						i += 1
						c = Taksitler.Values(i)
						d = Taksitler.Keys(i)
					End If
					c -= 1
					Donem.OdemeTarihi = d
				End If
			End If
		Next
		Hukuk.Af.KaydetIsyeri(Local, "2011", Tables("isyeri")("isyerino"), Borc, User.Kaykul)
		Info("Ödeme planı kaydedildi.")
		Dim Process As New OdemePlaniRaporuIsyeri2011
		Process.Arguments.Add("isyerino", Tables("isyeri")("isyerino"))
		Window.ClearAndLaunch(Process)
	End Sub

End Class

Class IsyeriPrimBorcu2011Tablo : Inherits Process

	Public Overrides Sub GenericEvent(e As ProcessEventArgs)
		Select Case e.EventType
			Case EventType.Initialize
				Start("İşyeri Taksitlendirme (2011)", "Ödeme tablosu.")
				AddReport()
			Case EventType.Shown

		End Select
	End Sub

End Class

Class IsyeriPrimBorcu2011Bordrolar : Inherits ProcessDialog

	Public isyerino As String

	Public Overrides Sub GenericEvent(ByVal e As ProcessEventArgs)
		Select Case e.EventType
			Case EventType.Initialize
				Text = "Bordro Düzenleme"
				InitialHelp = "Ekle ve Sil butonlarıyla bordro ekleyip çıkarabilirsiniz."
				AddList()
				List.AddColumns("bordrotar(Bordro Tarihi;d;95%),bordro(Bordro;c;55%),pek(PEK Toplamı;m;90%)")
				SetSize(512, 512)
			Case EventType.Shown
				Dim Rs = Hukuk.Af.IsyeriBordroOku(Local, "2011", isyerino)
				List.DataSource = Hukuk.Af.IsyeriBordroOku(Local, "2011", isyerino)
				Buttons.Show("Add.Delete.Save")
			Case EventType.Add
				Do
					Dim Process As New IsyeriPrimBorcu2011Bordro
					Process.List = List
					Process.Run(Me.Parent)
					If Not Process.Result Then Exit Do
					Modified = True
				Loop
			Case EventType.Delete
				If List.SelectedRows.Count = 0 Then Exit Sub
				If Not Confirm("Bu kaydı silmek istediğinizden emin misiniz?") Then Exit Sub
				Modified = True
				List.RemoveSelected()
			Case EventType.Save
				Hukuk.Af.IsyeriBordroKaydet(Local, "2011", isyerino, List)
				ReturnResult(True)
		End Select
	End Sub

End Class

Class IsyeriPrimBorcu2011Bordro
	Inherits ProcessDialog

	Public Shadows List As Grid

	Dim Bordro As Object = Split("D;D1;D2;E;C;H;L;X;Y", ";")

	Public Overrides Sub GenericEvent(ByVal e As ProcessEventArgs)
		Select Case e.EventType
			Case EventType.Initialize
				Text = "Bordro Girişi"
				InitialHelp = "Bordro tarihini ve ilgili bordroların PEK toplamını girin."
				For i = 0 To 9
					AddField("tarih" & i & ":AyYil[label=Bordro tarihi]", "")
					AddCombo("bordro" & i, "Bordro", "D|D1|D2|E|C|H|L|X|Y", "")
					AddMoney("tutar" & i, " PEK toplamı", "nl")
				Next
				SetSize(600, 450)
			Case EventType.Shown
				Buttons.Show("Save")
			Case EventType.Save
				For i = 0 To 9
					If Not IsEmpty("tarih" & i) Then
						If Check("tarih" & i, Not IsValidDate(Input("tarih" & i)), "Bordro tarihi geçersiz.") Then Return
						If Check("bordro" & i, IsEmpty("bordro" & i), "Bordro tipini girmeniz gerekir.") Then Return
					End If
				Next
				For i = 0 To 9
					If Not IsEmpty("tarih" & i) Then
						Result = True
						List.AddRow(New Date(Mid(Input("tarih" & i), 3, 4), Mid(Input("tarih" & i), 1, 2), 1), Input("bordro" & i), Input("tutar" & i))
					End If
				Next
				Close()
		End Select
	End Sub

	Function IsValidDate(Text As String) As Boolean
		If Len(Text) <> 6 Then Return False
		Dim Ay As Integer = Val(Mid(Text, 1, 2))
		If Ay < 1 Or Ay > 12 Then Return False
		Dim Yil As Integer = Val(Mid(Text, 3, 4))
		If Yil > 2011 And Ay > 6 Then Return False
		Return True
	End Function

End Class